#!/bin/bash

# 容器名称
CONTAINER_NAME="redis"
# 镜像名称
IMAGE_NAME="redis"
# 目录
REDIS_ROOT_DIR="/home/server/redis"
PASSWORD="80581ea6674b487aaf070e9df5ed9c60"

# 检测命令是否存在
command_exists() {
  local command_name="$1"
  type "$command_name" >/dev/null 2>&1
}

# 检查依赖命令是否已安装，如果未安装，则自动进行安装
check_dependency() {
  local dependency="$1"
  if command_exists "$dependency"; then
    echo "$dependency 已安装。"
  else
    echo "$dependency 暂未安装，请先执行 $dependency 安装脚本。"
    exit 1
  fi
}

# 判断容器是否存在
container_exist(){
  local container_name="$1"
  echo "检查容器 $container_name 是否存在..."
  if docker container inspect "$container_name" > /dev/null 2>/dev/null ; then
    echo "容器 $container_name 已存在。"
    return 0
  else
    echo "容器 $container_name 不存在。"
    return 1
  fi
}

# 判断镜像是否存在
image_exist(){
  local image_name="$1"
  echo "检查镜像 $image_name 是否存在..."
  if docker image inspect "$image_name" > /dev/null 2>/dev/null ; then
    echo "镜像 $image_name 已存在。"
    return 0
  else
    echo "镜像 $image_name 不存在。"
    return 1
  fi
}

check_dir(){
  local path="$1"
  echo "检查目录 $path 是否存在..."
  # 检测并创建目录
  if [ ! -d "$REDIS_ROOT_DIR" ]; then
    echo "目录不存在，创建目录..."
    mkdir -p "$REDIS_ROOT_DIR"
    echo "目录创建完成。"
  else
    echo "目录 $path 存在。"
  fi
}

# 运行容器
run_container(){
  local image_name="$1"
  local container_name="$2"
  echo "开始启动Redis容器..."
  docker run -d --name "$container_name" "$image_name"
  echo "Redis容器启动完成。"
}


echo "开始检测docker环境"
check_dependency "docker"

echo "开始部署Redis"
# 判断容器是否存在，如果存在则重启，如果不存在则创建
if container_exist $CONTAINER_NAME ; then
  echo "Redis 正在重启..."
  docker restart $CONTAINER_NAME
  echo "Redis 容器已重启完成。"
  exit 0
fi

if ! image_exist $IMAGE_NAME ; then
  echo "开始拉取Redis镜像..."
  docker pull $IMAGE_NAME
  echo "Redis镜像拉取完成。"
fi

echo "开始创建Redis容器..."
# 运行容器
run_container $IMAGE_NAME $CONTAINER_NAME

# 检测并创建目录
check_dir $REDIS_ROOT_DIR

echo "开始配置Redis容器..."
docker cp $CONTAINER_NAME:/data $REDIS_ROOT_DIR

# 创建配置文件
touch $REDIS_ROOT_DIR/redis.conf
{
  echo "requirepass $PASSWORD"
  echo "bind 0.0.0.0"
  echo "port 6379"
  echo "daemonize no"
  echo "appendonly yes"
} > $REDIS_ROOT_DIR/redis.conf

docker rm -f $CONTAINER_NAME

docker run -d --name $CONTAINER_NAME \
  -p 6379:6379 \
  --mount $REDIS_ROOT_DIR/data:/data \
  --mount $REDIS_ROOT_DIR/redis.conf:/usr/local/etc/redis/redis.conf \
  --restart=always \
  $IMAGE_NAME redis-server /usr/local/etc/redis/redis.conf

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME
echo "部署结束"

